package com.sg.dto.biz.finance.req;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * @desc ImplementBillAndAccountComReqDto
 * @使用场景
 */
@Data
public class ImplementBillAndAccountComReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 账单金额
     */
    @NotNull(message = "账单金额不能为空")
    @ApiModelProperty("账单金额")
    private Double billAmount;

    /**
     * 收支类型 INCOME:收入 SPENDING:支出
     */
    @NotNull(message = "收支类型不能为空")
    @ApiModelProperty("收支类型")
    private String billTypeCode;

    /**
     * 是否发生方账单 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否发生方账单不能为空")
    @ApiModelProperty("是否发生方账单")
    private String isOriginBill;

    /**
     * 是否对接财务 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否对接财务不能为空")
    @ApiModelProperty("是否对接财务")
    private String isButtFinance;

    /**
     * 流水业务故事信息
     */
    @NotNull(message = "流水业务故事信息不能为空")
    @ApiModelProperty("流水业务故事信息")
    private String billBizStory;

    /**
     * 账单归属账户ID
     */
    @NotNull(message = "账单归属账户ID不能为空")
    @ApiModelProperty("账单归属账户ID")
    private String billAccountId;

    /**
     * 费用科目类型
     */
    @ApiModelProperty("费用科目类型")
    private String accountSubjectTypeCode;

    /**
     * 费用科目ID
     */
    @ApiModelProperty("费用科目ID")
    private String accountSubjectId;

    /**
     * 冗余内容科目ID
     */
    @ApiModelProperty("冗余内容科目ID")
    private String contnetAccountSubjectld;

    /**
     * 11111冗余资金来源ID
     */
    @ApiModelProperty("11111冗余资金来源ID")
    private String capitalSourceId;

    /**
     * 对方账户ID
     */
    @ApiModelProperty("对方账户ID")
    private String oppositeAccountId;

    /**
     * 对方账户余额
     */
    @ApiModelProperty("对方账户余额")
    private Double oppositeAccountBalance;

    /**
     * 对方账户归属主体类型编码
     */
    @ApiModelProperty("对方账户归属主体类型编码")
    private String oppositeObjectTypeCode;

    /**
     * 对方账户归属主体ID
     */
    @ApiModelProperty("对方账户归属主体ID")
    private String oppositeObjectId;

    /**
     * 对方logo
     */
    @ApiModelProperty("对方logo")
    private String oppositeLogo;

    /**
     * 对方名称
     */
    @ApiModelProperty("对方名称")
    private String oppositeName;

    /**
     * 对方支付渠道账户（账户编码）
     */
    @ApiModelProperty("对方支付渠道账户（账户编码）")
    private String oppositeAccountCode;

    /**
     * 对方支付渠道账户名称
     */
    @ApiModelProperty("对方支付渠道账户名称")
    private String oppositeAccountName;

    /**
     * 对方银行开户行名称
     */
    @ApiModelProperty("对方银行开户行名称")
    private String oppositeOpeningBankName;

    /**
     * 收支方式 ONLINE_PAYMENT:在线支付 PAY_DELIVERY:货到付款 CASH:现金 ON_CREDIT:赊账 TALLY:记账
     */
    @NotNull(message = "收支方式不能为空")
    @ApiModelProperty("收支方式")
    private String billMethod;

    /**
     * 支付渠道 ALIPAY:支付宝 WE_CHAT_PAY:微信支付 BANK_CARD:银行卡
     */
    @ApiModelProperty("支付渠道")
    private String payChannel;

    /**
     * 支付渠道支付单号
     */
    @ApiModelProperty("支付渠道支付单号")
    private String payChannelOrderNo;

    /**
     * 关联业务单据对象ID
     */
    @ApiModelProperty("关联业务单据对象ID")
    private String bizBillObjectId;

    /**
     * 关联业务单据对象类型 TRADING_ORDER:交易订单 WITHDRAWAL_DOCUMENT:提现单 PROJECT:项目
     */
    @ApiModelProperty("关联业务单据对象类型")
    private String bizBillObjectTypeCode;

    /**
     * 账单状态 UNDERWAY:进行中 COMPLETE:完成 CLOSE:关闭
     */
    @NotNull(message = "账单状态不能为空")
    @ApiModelProperty("账单状态")
    private String billStatus;

    /**
     * 记录结算引擎ID
     */
    @ApiModelProperty("记录结算引擎ID")
    private String expensesSettleEngineId;

}
